/**
 * Mui事件管理类 
 * MuiEventMgr.loginout(); //退出
 */
var MuiEventMgr = {
	/**
	 * 页面基本路径 如果是首页点击则是 './' ，否则，是'../'
	 * MuiEventMgr.basePath
	 */
	basePath : '../',
	checkSession : function(sfn,ffn){
		var flag = this.checkIsOpen();
		 console.log("checkSession.flag="+flag);
		if(!flag){
			ffn();
		}else{
			this.checkSessionByRemote(sfn,ffn);
		}
	},
	/**
	 * 从服务器端检查session 是否过期
	 * @param sfn 当session会话存在时执行的函数
	 * @param ffn 当session会话失改时执行的函数 
	 */
	checkSessionByRemote : function(sfn,ffn){
		var url = UrlConfig.muser_check;
		var sessionId = plus.storage.getItem(KeyCfg.JSESSIONID);
		var userId = plus.storage.getItem(KeyCfg.userId); 
	     $.ajax(url, {  
	        data: {  
	          'dtype': 'jsonp',  
	          '_': new Date().getTime(),
	          JSESSIONID : sessionId,
	          userId : userId
	        },  
	        dataType: 'jsonp',  
	        crossDomain: true,  
	        success: function(data) {
	        		data = JSON.parse(data);
	        		var success = data.success;
	        		if(success){/*成功执行回调函数*/
	        			if(sfn) sfn();
	        		}else{
	        			//plus.nativeUI.toast(data.msg);	
	        			if(ffn){
	        				ffn();
	        			}
	        		}
	        },error:function(result){
	        		if(ffn) ffn();
	        }
	     });
	},
	/**
	 *	MuiEventMgr.openBySafe();
	 * 检查用户后再打开新窗口
	 * @param {Object} url	新窗口的URL
	 * @param {Object} cfg	新窗口的配置参数 
	 * @param callback 当用户session未过期的回调函数
	 */
	openBySafe : function(url,cfg, callback){
		var flag = this.checkIsOpen();
		if(!flag){
			var win = plus.webview.getWebviewById(appid);
			win.evalJS("activeTabItemPage('userAccount');");
			window.setTimeout(function(){win.show();},1000);
			return;
		}
		if(!callback){
			callback = function(){
				MuiEventMgr.open(url,cfg);
			};	
		}
		this.openByRemote(url,cfg,callback);
	},
	/**
	 * 打开时从服务器端检查session 是否过期
	 * @param url 新窗口的URL
	 * @param cfg 新窗口的配置参数
	 * @param {Object} callback	session未过期后的回调函数
	 */
	openByRemote : function(link,cfg,callback){
		var url = UrlConfig.muser_check;
		 var sessionId = plus.storage.getItem(KeyCfg.JSESSIONID);
		 var userId = plus.storage.getItem(KeyCfg.userId); 
	     $.ajax(url, {  
	        data: {  
	          'dtype': 'jsonp',  
	          '_': new Date().getTime(),
	          JSESSIONID : sessionId,
	          userId : userId
	        },  
	        dataType: 'jsonp',
	        crossDomain: true,  
	        success: function(data) {
	        		data = JSON.parse(data);
	        		var success = data.success;
	        		if(success){/*成功执行回调函数*/
	        			callback();
	        		}else{
	        			var _pars = {};
	        			if(cfg && cfg.pars) _pars = cfg.pars;
	        			MuiEventMgr.openLogin(link,_pars);
	        		}
	        }
	     });
	},
	/**
	 * 检查是否有权限打开窗口
	 * [当本地存储中没有sessionId时，自动跳转到登录页面]
	 */
	checkIsOpen :function(){
        var sessionId = plus.storage.getItem(KeyCfg.JSESSIONID);
        console.log("checkIsOpen.sessionId="+sessionId); 
        if(!sessionId) return false;
        return true;
	},
	/**
	 * 打开登录页面 
	 * @param {Object} prevUrl
	 * @param {Object} prevPars
	 */
	openLogin : function(prevUrl,prevPars){
//		var url = this.basePath+"login/login.html";
//		var pars = {};
//		pars.prevPars = prevPars;
//		pars.prevUrl = prevUrl;
//		plus.storage.setItem(KeyCfg.prevUrl,prevUrl);
//		var prevParsStr = "";
//		if(prevPars) prevParsStr = JSON.stringify(prevPars);
//		plus.storage.setItem(KeyCfg.prevPars,prevParsStr);
//		var cfg = {pars:pars};
//		this.open(url,cfg);
		var win = plus.webview.getWebviewById(appid);
		win.evalJS("activeTabItemPage('userAccount');");
		window.setTimeout(function(){win.show();},1000);
	},
	open :function(url,cfg){
		var winCfg = {
		    url:url,
		    show:{
		      autoShow:true,//页面loaded事件发生后自动显示，默认为true
		      duration:50//页面动画持续时间，Android平台默认100毫秒，iOS平台默认200毫秒；
		    },
		    waiting:{
		      autoShow:true,//自动显示等待框，默认为true
		      title:'正在加载...'//等待对话框上显示的提示内容
		    }
		};
		if(cfg && cfg.id) winCfg.id = cfg.id;
		if(cfg && cfg.pars) winCfg.extras = cfg.pars;
		if(cfg && cfg.styles) winCfg.styles = cfg.styles;
		if(cfg && cfg.show) winCfg.show = cfg.show;
		if(cfg && cfg.waiting) winCfg.waiting = cfg.waiting;
		mui.openWindow(winCfg);
	},
	/**
	 * 用户安全认证
	 * @param {Object} sfn
	 * @param {Object} ffn
	 */
	checkSecuityForwad : function(sfn){
		var _this = this;
		var url = UrlConfig.mproving_check;
		var sessionId = plus.storage.getItem(KeyCfg.JSESSIONID);
		
		var formDatas = {sessionId:sessionId};
		$.ajax(url, {  
	        data : formDatas,  
	        dataType : 'jsonp',  
	        crossDomain: true,  
	        success: function(data) {
	        		data = JSON.parse(data);
	        		var success = data.success;
	        		var msg = data.msg;
	        		if(!success){
	        			if(ffn) ffn();
	        		}else{
	        			if(msg && msg == "ok"){
	        				if(sfn) sfn();
	        			}else{
	        				var pars = data.pars;
		        			var targetUrl = data.msg;
		        			if(targetUrl == '../login/login.html'){
		        				var win = plus.webview.getWebviewById(appid);
								win.evalJS("activeTabItemPage('userAccount');");
								window.setTimeout(function(){win.show();},1000);
		        			}else{
		        				var cfg = {pars : pars};
		        				_this.open(targetUrl,cfg);
		        			}
	        			}
	        		}
	        },
	        error :function(){
	        		mui.alert("获取安全认证失败!");
	        		if(ffn) ffn();
	        }
	    });
	},
	/**
	 * 用户安全认证
	 * @param {Object} sfn
	 * @param {Object} ffn
	 * @param {Object} extCfg 扩展配置 {isBack : 1 [当完成按全认证时，不返回上一页面。而是调用 sfn 方法]}
	 */
	checkSecuity : function(sfn, ffn, extCfg){
		var _this = this;
		var url = UrlConfig.mproving_check;
		var sessionId = plus.storage.getItem(KeyCfg.JSESSIONID);
		
		var formDatas = {sessionId:sessionId};
		$.ajax(url, {  
	        data : formDatas,  
	        dataType : 'jsonp',  
	        crossDomain: true,  
	        success: function(data) {
	        		data = JSON.parse(data);
	        		var success = data.success;
	        		var msg = data.msg;
	        		if(!success){
	        			mui.alert(msg);
	        			if(ffn) ffn();
	        		}else{
	        			if(msg && msg == "ok"){
	        				_this.doBack();
	        			}else{
	        				var pars = data.pars;
		        			var targetUrl = data.msg;
		        			var cfg = {pars : pars};
		        			_this.open(targetUrl,cfg);
	        			}
	        			if(sfn) sfn();
	        		}
	        },
	        error :function(){
	        		mui.alert("获取安全认证失败!");
	        		if(ffn) ffn();
	        }
	    });
	},
	/**
	 * 返回目标页面 
	 */
	doBack : function(){
		var targetPageId = plus.storage.getItem(KeyCfg.targetPageId);
		console.log("doBack.targetPageId="+targetPageId);
		if(!targetPageId){
			mui.alert("参数：targetPageId 为 null ,无法跳转到下一步");
			return;
		}
		var targetPage = plus.webview.getWebviewById(targetPageId);
		targetPage.show();
		plus.webview.currentWebview().hide(10);
	    mui.fire(targetPage,'reload',{});
	    plus.storage.removeItem(KeyCfg.targetPageId);
	},
	/**
	 * 发起一个Ajax请求
	 * MuiEventMgr.ajax("./user/login.action",{
	 * 	pars:{userId:1},
	 * 	sfn : function(data){
	 * 		alert("ok");
	 * 	},ffn : function(){
	 * 		alert("no");
	 * }
	 * });
	 * @param {Object} url 服务器地址
	 * @param {Object} cfg	配置参数  {pars:{},sfn:function(){},ffn:function(){}}
	 */
	ajax : function(url,cfg){
		var _this = this;
		var pars = cfg.pars;
		$.ajax(url, {  
	        data : pars,  
	        dataType : 'jsonp',  
	        crossDomain: true,  
	        success: function(data) {
	        		data = JSON.parse(data);
	        		var success = data.success;
	        		var msg = data.msg;
	        		if(!success && msg == "session.timeout.break"){
	        			console.log("用户会话过期，跳转到登录页面...");
	        			_this.openLogin();
	        		}else{
	        			if(cfg.sfn) cfg.sfn(data);	
	        		}
	        },
	        error :function(XmlHttpRequest,textStatus, errorThrown){
	        	 	var errMsg = XmlHttpRequest.responseText;
	        		if(cfg.ffn) cfg.ffn(errMsg);
	        }
	    });
	},
	/**
	 * 退出登录 
	 */
	loginout : function(){
		var url = UrlConfig.muser_loginout;
		var sessionId = plus.storage.getItem(KeyCfg.JSESSIONID);
		var userId = plus.storage.getItem(KeyCfg.userId);
		var pars = {sessionId:sessionId,userId:userId};
		$.ajax(url, {
	        data : pars,  
	        dataType : 'jsonp',  
	        crossDomain: true,  
	        success: function(data) {
	        		data = JSON.parse(data);
	        		plus.storage.removeItem(KeyCfg.JSESSIONID);
	        		plus.storage.setItem(KeyCfg.currClickTabId,"defaultTab");
	        		plus.runtime.quit();
	        }, 
			error: function(e) { 
				plus.runtime.quit();
			} 
	    })
	}
}